{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%pip install --upgrade setuptools\n",
    "%pip install --upgrade gradio\n",
    "%pip install ipywidgets\n",
    "%pip install pandas\n",
    "%pip install tabulate\n",
    "%pip install python-dotenv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%pip install -e ../"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "import setuptools\n",
    "\n",
    "import os\n",
    "import sys\n",
    "module_path = os.path.abspath(os.path.join('..'))\n",
    "if module_path not in sys.path:\n",
    "    sys.path.append(module_path)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from dotenv import dotenv_values\n",
    "from typechat import Failure, TypeChatJsonTranslator, TypeChatValidator, create_language_model\n",
    "from examples.calendar import schema as calendar"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = create_language_model(dotenv_values())\n",
    "validator = TypeChatValidator(calendar.CalendarActions)\n",
    "translator = TypeChatJsonTranslator(model, validator, calendar.CalendarActions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas\n",
    "\n",
    "async def get_translation(message, history):\n",
    "    result = await translator.translate(message)\n",
    "    if isinstance(result, Failure):\n",
    "        return f\"Translation Failed ❌ \\n Context: {result.message}\"\n",
    "    else:\n",
    "        result = result.value\n",
    "        df = pandas.DataFrame.from_dict(result[\"actions\"])\n",
    "        return f\"Translation Succeeded! ✅\\n Table View \\n ``` {df.fillna('').to_markdown(tablefmt='grid')} \\n ```  \\n\"\n",
    "\n",
    "def get_examples():\n",
    "    example_prompts = []\n",
    "    with open('../examples/calendar/input.txt') as prompts_file:\n",
    "        for line in prompts_file:\n",
    "            example_prompts.append(line)\n",
    "    return example_prompts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import gradio as gr\n",
    "\n",
    "gr.ChatInterface(get_translation, title=\"📅 Calendar\", examples=get_examples()).launch()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
